* retire TopoMapPro Places File format.
* remove topomap pro reference files.
* catch serialization references up with tmpro retirement.
set(ALL_FMTS
${MINIMAL_FMTS} gtm.cc gpsutil.cc pcx.cc
- skytraq.cc holux.cc tmpro.cc tpg.cc tpo.cc
+ skytraq.cc holux.cc tpg.cc tpo.cc
xcsv.cc tiger.cc easygps.cc
saroute.cc navicache.cc delgpl.cc
ozi.cc text.cc html.cc
kml.cc wbt-200.cc
ALL_FMTS=$$MINIMAL_FMTS gtm.cc gpsutil.cc pcx.cc \
- skytraq.cc holux.cc tmpro.cc tpg.cc tpo.cc \
+ skytraq.cc holux.cc tpg.cc tpo.cc \
xcsv.cc tiger.cc easygps.cc \
saroute.cc navicache.cc delgpl.cc \
ozi.cc text.cc html.cc \
--- /dev/null
+/*
+ ----------------------------------------------------------------------------------------
+ TopoMapPro (.txt)
+ New Zealand Mapping Software
+ www.topomappro.com
+ (Tab Delimited text file)
+
+ Based on gpsbabel .MXF format by Alex Mottram (geo_alexm at cox-internet.com)
+ Tweaked for TopoMapPro by Nick Heaphy (nick at automata dot co dot nz)
+
+ Group sID sDescription fLat fLong fEasting fNorthing fAlt iColour iSymbol sHyperLink
+ 25 6 80 8 8 8 8 8 4 4 128 (lengths)
+
+ Based on the specifications found in the TopoMapPro documentation available from website
+ ----------------------------------------------------------------------------------------
+
+ Copyright (C) 2002-2014 Robert Lipe, robertlipe+source@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ */
+
+#include "defs.h"
+#include "cet_util.h"
+#include "csv_util.h"
+#include <cstdlib>
+
+#define MYNAME "TMPro"
+
+static gbfile* file_in, *file_out;
+static short_handle mkshort_handle;
+
+static void
+rd_init(const QString& fname)
+{
+ file_in = gbfopen(fname, "rb", MYNAME);
+}
+
+static void
+rd_deinit()
+{
+ gbfclose(file_in);
+}
+
+static void
+wr_init(const QString& fname)
+{
+ file_out = gbfopen(fname, "w", MYNAME);
+}
+
+static void
+wr_deinit()
+{
+ gbfclose(file_out);
+}
+
+static void
+data_read()
+{
+ char* buff;
+ int linecount = 0;
+
+ while ((buff = gbfgetstr(file_in))) {
+ if ((linecount++ == 0) && file_in->unicode) {
+ cet_convert_init(CET_CHARSET_UTF8, 1);
+ }
+
+ /* skip the line if it contains "sHyperLink" as it is a header (I hope :) */
+ if ((strlen(buff)) && (strstr(buff, "sHyperLink") == nullptr)) {
+
+ auto* wpt_tmp = new Waypoint;
+
+ /* data delimited by tabs, not enclosed in quotes. */
+ char* s = buff;
+ s = csv_lineparse(s, "\t", "", linecount);
+
+ int i = 0;
+ while (s) {
+ switch (i) {
+
+ /* Group sID sDescription fLat fLong fEasting fNorthing fAlt iColour iSymbol sHyperLink */
+ /* 0 1 2 3 4 5 6 7 8 9 10 */
+
+ case 0:
+ /* ignore: group */
+ break;
+ case 1:
+ wpt_tmp->shortname = csv_stringtrim(s, "");
+ break;
+ case 2:
+ /* Description is not a TopoMapPro format requirement.
+ If we assign "" then .loc/.gpx will generate empty XML tags :(
+ */
+ wpt_tmp->description = csv_stringtrim(s, "");
+ break;
+ case 3:
+ wpt_tmp->latitude = atof(s);
+ break;
+ case 4:
+ wpt_tmp->longitude = atof(s);
+ break;
+ case 5:
+ /* ignore: NZMapGrid Easting */
+ break;
+ case 6:
+ /* ignore: NZMapGrid Northing */
+ break;
+ case 7:
+ wpt_tmp->altitude = atof(s);
+ break;
+ case 8:
+ /* ignore: color */
+ break;
+ case 9:
+ /* ignore: symbol (non standard) */
+ break;
+ case 10:
+ /* URL is not a TopoMapPro format requirement.
+ You can store file links etc, we will discard anything that is not http
+ (as URLs in TMPro must start "http:") as other GPS formats probably can't
+ use the TopoMapLinks links.
+ (plus discards length 0 strings (so no empty XML tags))
+ */
+ {
+ QString link = csv_stringtrim(s, "");
+ if (link.contains("http:")) {
+ wpt_tmp->AddUrlLink(link);
+ }
+ }
+ break;
+ default:
+ /* whoa! nelly */
+ warning(MYNAME ": Warning: data fields on line %d exceed specification.\n",
+ linecount);
+ break;
+ }
+ i++;
+
+ s = csv_lineparse(nullptr, "\t", "\"", linecount);
+ }
+
+ if (i != 11) {
+ delete wpt_tmp;
+ warning(MYNAME ": WARNING - extracted %d fields from line %d. \nData on line ignored.\n",
+ i, linecount);
+ } else {
+ waypt_add(wpt_tmp);
+ }
+
+ } else {
+ /* empty line */
+ }
+
+ }
+}
+
+static void
+tmpro_waypt_pr(const Waypoint* wpt)
+{
+ int icon = 1; /* default to "flag" */
+ int colour = 255; /*default to red */
+ QString shortname;
+ QString description;
+ if ((wpt->shortname.isEmpty()) || (global_opts.synthesize_shortnames)) {
+ if (!wpt->description.isEmpty()) {
+ if (global_opts.synthesize_shortnames) {
+ shortname = mkshort_from_wpt(mkshort_handle, wpt);
+ } else {
+ shortname = csv_stringclean(wpt->description, ",\"");
+ }
+ } else {
+ /* no description available */
+ shortname = "";
+ }
+ } else {
+ shortname = csv_stringclean(wpt->shortname, ",\"");
+ }
+
+ if (wpt->description.isEmpty()) {
+ if (!shortname.isEmpty()) {
+ description = csv_stringclean(shortname, ",\"");
+ } else {
+ description = "";
+ }
+ } else {
+ description = csv_stringclean(wpt->description, ",\"");
+ }
+
+ /* Group sID sDescription fLat fLong fEasting fNorthing fAlt iColour iSymbol sHyperLink */
+ /* 0 1 2 3 4 5 6 7 8 9 10 */
+ /* Number of characters */
+ /* 25 6 80 8 8 8 8 8 4 4 128 */
+
+ const char* l = nullptr;
+ if (wpt->HasUrlLink()) {
+ // Yes, it's lame to allocate/copy here.
+ UrlLink link = wpt->GetUrlLink();
+ l = xstrdup(link.url_);
+ }
+ gbfprintf(file_out, "new\t%.6s\t%.80s\t%08.6f\t%08.6f\t\t\t%.2f\t%d\t%d\t%.128s\n",
+ CSTRc(shortname),
+ CSTRc(description),
+ wpt->latitude,
+ wpt->longitude,
+ wpt->altitude,
+ colour,
+ icon,
+ l ? l : ""
+ );
+
+ if (l) {
+ xfree(l);
+ }
+}
+
+static void
+data_write()
+{
+ /* Short names */
+ if (global_opts.synthesize_shortnames) {
+ mkshort_handle = mkshort_new_handle();
+ setshort_length(mkshort_handle, 6);
+ setshort_whitespace_ok(mkshort_handle, 0);
+ setshort_badchars(mkshort_handle, "\",");
+ }
+
+ /* Write file header */
+ gbfprintf(file_out, "Group\tsID\tsDescription\tfLat\tfLong\tfEasting\tfNorthing\tfAlt\tiColour\tiSymbol\tsHyperLink\n");
+
+ waypt_disp_all(tmpro_waypt_pr);
+ mkshort_del_handle(&mkshort_handle);
+}
+
+ff_vecs_t tmpro_vecs = {
+ ff_type_file,
+ FF_CAP_RW_WPT,
+ rd_init,
+ wr_init,
+ rd_deinit,
+ wr_deinit,
+ data_read,
+ data_write,
+ nullptr,
+ nullptr,
+ CET_CHARSET_ASCII, 0 /* CET-REVIEW */
+ , NULL_POS_OPS,
+ nullptr
+};
+
tomtom_itn_places itn TomTom Places Itineraries (.itn)
tomtom_asc asc TomTom POI file (.asc)
tomtom ov2 TomTom POI file (.ov2)
-tmpro tmpro TopoMapPro Places File
dmtlog trl TrackLogs digital mapping (.trl)
tiger U.S. Census Bureau Tiger Mapping Service
unicsv Universal csv with field structure in first line
file tomtom_itn_places itn TomTom Places Itineraries (.itn)
file tomtom_asc asc TomTom POI file (.asc)
file tomtom ov2 TomTom POI file (.ov2)
-file tmpro tmpro TopoMapPro Places File
file dmtlog trl TrackLogs digital mapping (.trl)
file tiger U.S. Census Bureau Tiger Mapping Service
file unicsv Universal csv with field structure in first line
file ----rw tomtom_itn_places itn TomTom Places Itineraries (.itn)
file rw---- tomtom_asc asc TomTom POI file (.asc)
file rw---- tomtom ov2 TomTom POI file (.ov2)
-file rw---- tmpro tmpro TopoMapPro Places File
file rwrw-- dmtlog trl TrackLogs digital mapping (.trl)
file rw---- tiger U.S. Census Bureau Tiger Mapping Service
file rwrwrw unicsv Universal csv with field structure in first line
file rw---- tomtom ov2 TomTom POI file (.ov2) tomtom
https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tomtom.html
-file rw---- tmpro tmpro TopoMapPro Places File tmpro
- https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tmpro.html
file rwrw-- dmtlog trl TrackLogs digital mapping (.trl) dmtlog
https://www.gpsbabel.org/WEB_DOC_DIR/fmt_dmtlog.html
option dmtlog index Index of track (if more than one in source) integer 1 1 https://www.gpsbabel.org/WEB_DOC_DIR/fmt_dmtlog.html#fmt_dmtlog_o_index
prefer_shortnames (0/1) Use shortname instead of description
datum GPS datum (def. WGS 84)
tomtom TomTom POI file (.ov2)
- tmpro TopoMapPro Places File
dmtlog TrackLogs digital mapping (.trl)
index Index of track (if more than one in source)
tiger U.S. Census Bureau Tiger Mapping Service
+++ /dev/null
-Group sID sDescription fLat fLong fEasting fNorthing fAlt iColour iSymbol sHyperLink
-new GCEBB Mountain Bike Heaven by susy1313 35.972033 -87.134700 0.00 255 1 http://www.geocaching.com/seek/cache_details.asp?ID=3771
-new GC1A37 The Troll by a182pilot & Family 36.090683 -86.679550 0.00 255 1 http://www.geocaching.com/seek/cache_details.asp?ID=6711
-new GC1C2B Dive Bomber by JoGPS & family 35.996267 -86.620117 0.00 255 1 http://www.geocaching.com/seek/cache_details.asp?ID=7211
-new GC25A9 FOSTER by JoGPS & Family 36.038483 -86.648617 0.00 255 1 http://www.geocaching.com/seek/cache_details.asp?ID=9641
-new GC2723 Logan Lighthouse by JoGps & Family 36.112183 -86.741767 0.00 255 1 http://www.geocaching.com/seek/cache_details.asp?ID=10019
-new GC2B71 Ganier Cache by Susy1313 36.064083 -86.790517 0.00 255 1 http://www.geocaching.com/seek/cache_details.asp?ID=11121
-new GC309F Shy's Hill by FireFighterEng33 36.087767 -86.809733 0.00 255 1 http://www.geocaching.com/seek/cache_details.asp?ID=12447
-new GC317A GittyUp by JoGPS / Warner Parks 36.057500 -86.892000 0.00 255 1 http://www.geocaching.com/seek/cache_details.asp?ID=12666
-new GC317D Inlighting by JoGPS / Warner Parks 36.082800 -86.867283 0.00 255 1 http://www.geocaching.com/seek/cache_details.asp?ID=12669
--- /dev/null
+# tmpro (TopoMapPro Places) file format
+rm -f ${TMPDIR}/topomappro.txt ${TMPDIR}/mxf.mxf
+gpsbabel -i tmpro -f ${REFERENCE}/topomappro.txt -o tmpro -F ${TMPDIR}/tmp.txt
+gpsbabel -i tmpro -f ${TMPDIR}/tmp.txt -o tmpro -F ${TMPDIR}/topomappro.txt
+compare ${TMPDIR}/topomappro.txt ${REFERENCE}
+
+++ /dev/null
-# tmpro (TopoMapPro Places) file format
-rm -f ${TMPDIR}/topomappro.txt ${TMPDIR}/mxf.mxf
-gpsbabel -i tmpro -f ${REFERENCE}/topomappro.txt -o tmpro -F ${TMPDIR}/tmp.txt
-gpsbabel -i tmpro -f ${TMPDIR}/tmp.txt -o tmpro -F ${TMPDIR}/topomappro.txt
-compare ${TMPDIR}/topomappro.txt ${REFERENCE}
-
+++ /dev/null
-/*
- ----------------------------------------------------------------------------------------
- TopoMapPro (.txt)
- New Zealand Mapping Software
- www.topomappro.com
- (Tab Delimited text file)
-
- Based on gpsbabel .MXF format by Alex Mottram (geo_alexm at cox-internet.com)
- Tweaked for TopoMapPro by Nick Heaphy (nick at automata dot co dot nz)
-
- Group sID sDescription fLat fLong fEasting fNorthing fAlt iColour iSymbol sHyperLink
- 25 6 80 8 8 8 8 8 4 4 128 (lengths)
-
- Based on the specifications found in the TopoMapPro documentation available from website
- ----------------------------------------------------------------------------------------
-
- Copyright (C) 2002-2014 Robert Lipe, robertlipe+source@gpsbabel.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
- */
-
-#include "defs.h"
-#include "cet_util.h"
-#include "csv_util.h"
-#include <cstdlib>
-
-#define MYNAME "TMPro"
-
-static gbfile* file_in, *file_out;
-static short_handle mkshort_handle;
-
-static void
-rd_init(const QString& fname)
-{
- file_in = gbfopen(fname, "rb", MYNAME);
-}
-
-static void
-rd_deinit()
-{
- gbfclose(file_in);
-}
-
-static void
-wr_init(const QString& fname)
-{
- file_out = gbfopen(fname, "w", MYNAME);
-}
-
-static void
-wr_deinit()
-{
- gbfclose(file_out);
-}
-
-static void
-data_read()
-{
- char* buff;
- int linecount = 0;
-
- while ((buff = gbfgetstr(file_in))) {
- if ((linecount++ == 0) && file_in->unicode) {
- cet_convert_init(CET_CHARSET_UTF8, 1);
- }
-
- /* skip the line if it contains "sHyperLink" as it is a header (I hope :) */
- if ((strlen(buff)) && (strstr(buff, "sHyperLink") == nullptr)) {
-
- auto* wpt_tmp = new Waypoint;
-
- /* data delimited by tabs, not enclosed in quotes. */
- char* s = buff;
- s = csv_lineparse(s, "\t", "", linecount);
-
- int i = 0;
- while (s) {
- switch (i) {
-
- /* Group sID sDescription fLat fLong fEasting fNorthing fAlt iColour iSymbol sHyperLink */
- /* 0 1 2 3 4 5 6 7 8 9 10 */
-
- case 0:
- /* ignore: group */
- break;
- case 1:
- wpt_tmp->shortname = csv_stringtrim(s, "");
- break;
- case 2:
- /* Description is not a TopoMapPro format requirement.
- If we assign "" then .loc/.gpx will generate empty XML tags :(
- */
- wpt_tmp->description = csv_stringtrim(s, "");
- break;
- case 3:
- wpt_tmp->latitude = atof(s);
- break;
- case 4:
- wpt_tmp->longitude = atof(s);
- break;
- case 5:
- /* ignore: NZMapGrid Easting */
- break;
- case 6:
- /* ignore: NZMapGrid Northing */
- break;
- case 7:
- wpt_tmp->altitude = atof(s);
- break;
- case 8:
- /* ignore: color */
- break;
- case 9:
- /* ignore: symbol (non standard) */
- break;
- case 10:
- /* URL is not a TopoMapPro format requirement.
- You can store file links etc, we will discard anything that is not http
- (as URLs in TMPro must start "http:") as other GPS formats probably can't
- use the TopoMapLinks links.
- (plus discards length 0 strings (so no empty XML tags))
- */
- {
- QString link = csv_stringtrim(s, "");
- if (link.contains("http:")) {
- wpt_tmp->AddUrlLink(link);
- }
- }
- break;
- default:
- /* whoa! nelly */
- warning(MYNAME ": Warning: data fields on line %d exceed specification.\n",
- linecount);
- break;
- }
- i++;
-
- s = csv_lineparse(nullptr, "\t", "\"", linecount);
- }
-
- if (i != 11) {
- delete wpt_tmp;
- warning(MYNAME ": WARNING - extracted %d fields from line %d. \nData on line ignored.\n",
- i, linecount);
- } else {
- waypt_add(wpt_tmp);
- }
-
- } else {
- /* empty line */
- }
-
- }
-}
-
-static void
-tmpro_waypt_pr(const Waypoint* wpt)
-{
- int icon = 1; /* default to "flag" */
- int colour = 255; /*default to red */
- QString shortname;
- QString description;
- if ((wpt->shortname.isEmpty()) || (global_opts.synthesize_shortnames)) {
- if (!wpt->description.isEmpty()) {
- if (global_opts.synthesize_shortnames) {
- shortname = mkshort_from_wpt(mkshort_handle, wpt);
- } else {
- shortname = csv_stringclean(wpt->description, ",\"");
- }
- } else {
- /* no description available */
- shortname = "";
- }
- } else {
- shortname = csv_stringclean(wpt->shortname, ",\"");
- }
-
- if (wpt->description.isEmpty()) {
- if (!shortname.isEmpty()) {
- description = csv_stringclean(shortname, ",\"");
- } else {
- description = "";
- }
- } else {
- description = csv_stringclean(wpt->description, ",\"");
- }
-
- /* Group sID sDescription fLat fLong fEasting fNorthing fAlt iColour iSymbol sHyperLink */
- /* 0 1 2 3 4 5 6 7 8 9 10 */
- /* Number of characters */
- /* 25 6 80 8 8 8 8 8 4 4 128 */
-
- const char* l = nullptr;
- if (wpt->HasUrlLink()) {
- // Yes, it's lame to allocate/copy here.
- UrlLink link = wpt->GetUrlLink();
- l = xstrdup(link.url_);
- }
- gbfprintf(file_out, "new\t%.6s\t%.80s\t%08.6f\t%08.6f\t\t\t%.2f\t%d\t%d\t%.128s\n",
- CSTRc(shortname),
- CSTRc(description),
- wpt->latitude,
- wpt->longitude,
- wpt->altitude,
- colour,
- icon,
- l ? l : ""
- );
-
- if (l) {
- xfree(l);
- }
-}
-
-static void
-data_write()
-{
- /* Short names */
- if (global_opts.synthesize_shortnames) {
- mkshort_handle = mkshort_new_handle();
- setshort_length(mkshort_handle, 6);
- setshort_whitespace_ok(mkshort_handle, 0);
- setshort_badchars(mkshort_handle, "\",");
- }
-
- /* Write file header */
- gbfprintf(file_out, "Group\tsID\tsDescription\tfLat\tfLong\tfEasting\tfNorthing\tfAlt\tiColour\tiSymbol\tsHyperLink\n");
-
- waypt_disp_all(tmpro_waypt_pr);
- mkshort_del_handle(&mkshort_handle);
-}
-
-ff_vecs_t tmpro_vecs = {
- ff_type_file,
- FF_CAP_RW_WPT,
- rd_init,
- wr_init,
- rd_deinit,
- wr_deinit,
- data_read,
- data_write,
- nullptr,
- nullptr,
- CET_CHARSET_ASCII, 0 /* CET-REVIEW */
- , NULL_POS_OPS,
- nullptr
-};
-
extern ff_vecs_t tpg_vecs;
extern ff_vecs_t tpo2_vecs;
extern ff_vecs_t tpo3_vecs;
-extern ff_vecs_t tmpro_vecs;
extern ff_vecs_t tiger_vecs;
extern ff_vecs_t easygps_vecs;
extern ff_vecs_t saroute_vecs;
LegacyFormat tpg_fmt {tpg_vecs};
LegacyFormat tpo2_fmt {tpo2_vecs};
LegacyFormat tpo3_fmt {tpo3_vecs};
- LegacyFormat tmpro_fmt {tmpro_vecs};
LegacyFormat tiger_fmt {tiger_vecs};
LegacyFormat easygps_fmt {easygps_vecs};
LegacyFormat saroute_fmt {saroute_vecs};
"tpo",
nullptr,
},
- {
- &tmpro_fmt,
- "tmpro",
- "TopoMapPro Places File",
- "tmpro",
- nullptr,
- },
{
&tiger_fmt,
"tiger",
+++ /dev/null
-
-
-
- <para>Reads and writes places files for
-use in <ulink url="http://www.topomappro.com">TopoMapPro places files</ulink>. As this file
-type can store links other than web links, anything that is not a http
-url will be discarded. Note that this does not do datum conversions,
-so if your input file does not have WGS84/NZGD2000 data, your output
-file won't either. The color of waypoint icons defaults to red.</para>
-